package com.secsys.service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

import com.secsys.dto.StoStockdailyDTO;
import com.secsys.model.TbStoStock;
import com.secsys.model.TbStoStockdaily;

public interface StoStockdailyService extends Service<TbStoStockdaily, Integer> {
	/**
	 * 根据股票代码查找查找StoStockdailyDTO（股票日线数据）对象数组
	 * @param stockCode
	 * 			股票代码，TbStoStockDTO的stockCode
	 * @param 	offset
	 * 			分页的起始索引
	 * @param	count
	 * 			显示（查找）的个数、条数
	 * @return
	 * 			List<StoStockdailyDTO>对象数组
	 */
	public List<StoStockdailyDTO> queryStoStockdailyByStockCode(String stockCode,int offset,int count);
	
	/**
	 * 根据“基本信息对象”tbStoStock查找StoStockdailyDTO（股票日线数据）对象数组
	 * @param tbStoStock
	 * 			股票基本信息POJO对象，TbStoStockDTO对象
	 * @param 	offset
	 * 			分页的起始索引
	 * @param	count
	 * 			显示（查找）的个数、条数
	 * @return
	 * 			List<StoStockdailyDTO>（股票日线数据）对象的List
	 */
	public List<StoStockdailyDTO> queryStoStockdailyByTbStoStock(TbStoStock tbStoStock,int offset,int count);
	
	/**
	 * 根据日期date，查找某日所有股票的StoStockdailyDTO（股票日线数据）对象数组
	 * @param	operateDate
	 * 			待查询的某天时间，如：1999-11-24
	 * @param	sortBy
	 * 			排序方式(sortBy)：1为升序、0为降序
	 * @param 	offset
	 * 			分页的起始索引
	 * @param	count
	 * 			显示（查找）的个数、条数
	 * @return
	 * 			StoStockdailyDTO（股票日线数据）对象数组
	 */
	public List<StoStockdailyDTO> queryStoStockdailyByDate(Date operateDate,int sortBy,int offset,int count);
	
	/**
	 * 根据股票代码stockCode和日期date，查找某日某股的StoStockdailyDTO（股票日线数据）对象数组
	 * @param 	stockCode
	 * 			股票代码，TbStoStockDTO的stockCode
	 * @param	operateDate
	 * 			待查询的某天时间，如：1999-11-24
	 * @return
	 * 			StoStockdailyDTO（股票日线数据）对象数组
	 */
	public List<StoStockdailyDTO> queryStoStockdailyByTbStoStockCodeAndDate(int stockCode,Date operateDate);
	
	/**
	 * 根据“基本信息对象”tbStoStock和日期date，查找某日某股的StoStockdailyDTO（股票日线数据）对象数组
	 * @param tbStoStock
	 * 			股票基本信息POJO对象，TbStoStockDTO对象
	 * @param	operateDate
	 * 			待查询的某天时间，如：1999-11-24
	 * @return
	 * 			StoStockdailyDTO（股票日线数据）对象数组
	 */
	public List<StoStockdailyDTO> queryStoStockdailyByTbStoStockAndDate(TbStoStock tbStoStock,Date operateDate);
	
	/**
	 * <pre>根据给定的“成交额范围”，查找某日所有股票的StoStockdailyDTO（股票日线数据）对象数组
	 * 比如：成交额在 145887120.000 到 628908288.000  之间的所有数据
	 * </pre>
	 * @param	startAmount
	 * 			成交额（给定的开始值）
	 * @param	endAmount
	 * 			成交额（给定的结束值）
	 * @param 	offset
	 * 			分页的起始索引
	 * @param	count
	 * 			显示（查找）的个数、条数
	 * @return
	 * 			StoStockdailyDTO（股票日线数据）对象数组
	 */
	public List<StoStockdailyDTO> queryStoStockdailyByAmount(double startAmount,double endAmount,int offset,int count);
	
	/**
	 * <pre>根据给定的“成交量范围”，查找某日所有股票的StoStockdailyDTO（股票日线数据）对象数组
	 * 比如：成交量在 2282600 到 5374900 之间的所有数据
	 * </pre>
	 * @param	startVlume
	 * 			成交量（给定的开始值）
	 * @param	endVolume
	 * 			成交量（给定的结束值）
	 * @param 	offset
	 * 			分页的起始索引
	 * @param	count
	 * 			显示（查找）的个数、条数
	 * @return
	 * 			StoStockdailyDTO（股票日线数据）对象数组
	 */
	public List<StoStockdailyDTO> queryStoStockdailyByVolume(double startVlume,double endVolume,int offset,int count);
	
	
	/**
	 * 按照股票代码，计算该股日线数据总量
	 * @param stockCode
	 * @return
	 */
	public int countByStockCode(String stockCode);
	/**
	 * 按照股票基本对象，计算该股日线数据总量
	 * @param stockCode
	 * @return
	 */
	public int countByTbStoStock(TbStoStock tbStoStock);
	
	/**
	 * 计算某个时间范围之内，收盘价的涨跌百分比为rate的日线数据个数
	 * @param startDate时间范围开始端
	 * @param endDate时间范围结束端
	 * @param rate涨跌百分比
	 * @param updown上升、下降（1为上升、0为下降）
	 * @return
	 */
	public int countSearchWithEndPrice(Date startDate,Date endDate,double rate,int updown);
	
	
	/**
	 * 			计算某个时间范围之内，收盘价的涨跌百分比为rate的日线数据个数
	 * 			按照给定的起始年月和结束日期，以及上升、下降百分比进行搜索，返回搜索的记录集合HashMap<String, List>
	 * @param startDate开始时间
	 * @param endDate结束时间
	 * @param rate上升、下降的百分比
	 * @param updown上升还是下降的类型，1为上升、0为下降
	 * @param offset
	 * 			分页的起始索引
	 * @param count
	 * 			显示（查找）的个数、条数
	 * @return
	 */
	public HashMap<String, List> querySearchWithEndPrice(Date startDate,Date endDate,double rate,int updown,int offset,int count);
	
	/**
	 * 列出某天的高价股票
	 * @param date日期
	 * @param sortBy排序方式，1为升序、0为降序
	 * @param offset分页的起始索引
	 * @param count显示（查找）的个数、条数
	 * @return
	 */
	public HashMap<String, List> queryTopPrice(Date date,int sortBy,int offset,int count);
	/**
	 * 得到最新的日期
	 * @return
	 */
	public Date findLastDate(); 
}
